package be.groept.ace.cursusplanning.controller;

import Exceptions.ConfigurationException;
import Log.Log;
import be.groept.ace.cursusplanning.persistency.DBMS;
import be.groept.ace.cursusplanning.persistency.DBMS_Tekstbestanden;
import be.groept.ace.cursusplanning.persistency.IDBMS;
import be.groept.ace.cursusplanning.persistency.IPersistentieController;
import be.groept.ace.cursusplanning.view.*;
import javax.swing.JFrame;

public class OpstartController {
	private Menu menu;
	private JFrame planning, inschrijving, lessenroosterOverzicht, opdrachtOverzicht;
	private PlanningController planningController;
	private InschrijvingController inschrijvingController;
	private LessenroosterOverzichtController lessenroosterOverzichtController;
	private OpdrachtOverzichtController opdrachtOverzichtController;
	
	private AppConfig appConfig;
	private IDBMS _db;
	private IPersistentieController pCTRL;
	Log log = new Log(null); // wordt hier gedeclareerd om de output op console te zetten
	
	public OpstartController(){
	
		
		try {
			
			appConfig = new AppConfig("C:\\_temp\\javaprac\\AppConfig.txt");
			pCTRL = new DBMS_Tekstbestanden(appConfig);
			_db  = new DBMS(pCTRL);
			
			//inlezen tekstbestanden, opvullen containers
			planningController = new PlanningController(_db);
			inschrijvingController = new InschrijvingController(_db.getInschrijvingen(), _db.getCursisten(), _db.getCursussen(), _db);
			lessenroosterOverzichtController = new LessenroosterOverzichtController(_db);
			opdrachtOverzichtController = new OpdrachtOverzichtController(_db);
			menu = new Menu("Plannen van aangeboden cursussen","Inschrijven voor cursus door cursist","Overzicht lessenroosters cursisten","Overzicht opdrachten lectoren");
		} 
		
		catch (ConfigurationException e) {
			Log.LOG(e.getMessage());
		}	
		
		
	
	}
	
	public IDBMS getDatabase(){
		return this._db;
		
	}
	
	public void execute(){
		int keuze = menu.getMenuKeuze();
		
		switch (keuze){
			case 1: planning = new PlanningFrame(this,planningController);
			        planning.setVisible(true);;
			        break;
			case 2:	inschrijving = new InschrijvingFrame(this, inschrijvingController, _db.getCursisten(), _db.getInschrijvingen(), _db.getCursussen());
					inschrijving.setVisible(true);
				    break;
			case 3: lessenroosterOverzicht = new LessenroosterOverzichtFrame(this, lessenroosterOverzichtController);
				    lessenroosterOverzicht.setVisible(true);
					break;
			case 4: opdrachtOverzicht = new OpdrachtOverzichtFrame(this, opdrachtOverzichtController);
					opdrachtOverzicht.setVisible(true);
					break;
			case 5:
				    System.exit(0);
				    break;
			default:
				    if (keuze != menu.getStopWaarde()){
				    	IO.toonStringMetVenster("Je hebt een verkeerde keuze gemaakt!!!");
				    	keuze = menu.getMenuKeuze();
				    }	
		}
	}
	
	public static void main(String[] args) {  
		
		Log.LOG("Application started...",2); 
		
		new OpstartController().execute();

	}

}
